/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.siseventos.managed;

import br.siseventos.model.TbLocal;
import br.siseventos.model.TdTipoLocal;
import br.siseventos.service.LocalService;
import br.siseventos.service.TipoLocalService;
import br.siseventos.view.util.CallbackHelper;
import br.siseventos.view.util.MessageHelper;
import java.io.Serializable;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.event.ActionEvent;

@ManagedBean(name = "localBean")
@ViewScoped
public class LocalBean extends BaseBean{

    // Campos
    private TbLocal localSelecionado;
    private String tituloDialogo;
    private boolean bNovo;
    // Listas
    private List<TdTipoLocal> listaTiposLocais;
    private List<TbLocal> listaLocais;
    // Services
    private LocalService localService;
    private TipoLocalService tipoLocalService;

    // Construtor
    public LocalBean() {

        // Inicializando os Services
        setupServices();

        // Populando os componentes de exibição de dados
        popularDataTable();
        popularMenuTipoLocal();

        // Inicializando campos necessários
        localSelecionado = new TbLocal();
    }

    // Action e Listeners
    public void cadastrarAtualizarLocal(ActionEvent event) {
        TbLocal local = null;
        try {
            if (bNovo) {
                local = new TbLocal(localSelecionado.getTdTipoLocal(), localSelecionado.getNmeLocal(),
                        localSelecionado.getQtdVagasLocal());
                // Cadastrar o local no banco
                localService.incluir(local);

            } else {
                // Alterar o local no banco
                localService.alterar(localSelecionado);

            }
            // Repopulando os dados do DataTable
            popularDataTable();

            // Adicionando os parâmetros de Callback
            CallbackHelper.addCallback((bNovo) ? "salvo" : "editado", true);

            // Mostrar mensagem de sucesso
            MessageHelper.showGlobalMessage(String.format("Local %s com sucesso!", (bNovo) ? "cadastrado" : "alterado"),
                    FacesMessage.SEVERITY_INFO);
        } catch (Exception e) {
            // Mostrar mensagem de sucesso
            MessageHelper.showGlobalMessage("Erro ao cadastrar local!", FacesMessage.SEVERITY_ERROR);
        }
    }

    public void excluirLocal(ActionEvent event) {
        try {
            // Excluir o local do banco
            localService.excluir(localSelecionado.getIdtLocal());

            // Repopulando os dados do DataTable
            popularDataTable();

            // Mostrar mensagem de sucesso
            MessageHelper.showGlobalMessage("Local excluído com sucesso!", FacesMessage.SEVERITY_INFO);
        } catch (Exception e) {
            // Mostrar mensagem de sucesso
            MessageHelper.showGlobalMessage("Erro ao excluir local!", FacesMessage.SEVERITY_ERROR);
        }

    }

    public void novoLocal(ActionEvent e) {
        // Resetando o local selecionado
        localSelecionado = new TbLocal();
    }
    // Getters e Setters

    public boolean getBNovo() {
        return bNovo;
    }

    public void setBNovo(boolean bNovo) {
        this.bNovo = bNovo;
    }

    public TbLocal getLocalSelecionado() {
        return localSelecionado;
    }

    public void setLocalSelecionado(TbLocal localSelecionado) {
        this.localSelecionado = localSelecionado;
    }

    public List<TbLocal> getListaLocais() {
        return listaLocais;
    }

    public void setListaLocais(List<TbLocal> listaLocais) {
        this.listaLocais = listaLocais;
    }

    public List<TdTipoLocal> getListaTiposLocais() {
        return listaTiposLocais;
    }

    public void setListaTiposLocais(List<TdTipoLocal> listaTiposLocais) {
        this.listaTiposLocais = listaTiposLocais;
    }

    public String getTituloDialogo() {
        return tituloDialogo;
    }

    public void setTituloDialogo(String tituloDialogo) {
        this.tituloDialogo = tituloDialogo;
    }
    
    // Util
    private void setupServices() {
        localService = new LocalService();
        tipoLocalService = new TipoLocalService();
    }

    public void popularDataTable() {
        try {
            listaLocais = localService.consultarTodos();
        } catch (Exception e) {
        }
    }

    public void popularMenuTipoLocal() {
        try {
            listaTiposLocais = tipoLocalService.consultarTodos();
        } catch (Exception e) {
        }
    }
}
